home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / SourceCode / AdobeExamples / NX_ImportAdv / rotateprocs.h < prev    next >
C/C++ Source or Header  |  1992-12-19  |  3KB  |  87 lines

  1.  
  2. /*
  3.  * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
  4.  *
  5.  * (b)  If this Sample Code is distributed as part of the Display PostScript
  6.  *    System Software Development Kit from Adobe Systems Incorporated,
  7.  *    then this copy is designated as Development Software and its use is
  8.  *    subject to the terms of the License Agreement attached to such Kit.
  9.  *
  10.  * (c)  If this Sample Code is distributed independently, then the following
  11.  *    terms apply:
  12.  *
  13.  * (d)  This file may be freely copied and redistributed as long as:
  14.  *    1) Parts (a), (d), (e) and (f) continue to be included in the file,
  15.  *    2) If the file has been modified in any way, a notice of such
  16.  *      modification is conspicuously indicated.
  17.  *
  18.  * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
  19.  *    Adobe Systems Incorporated.
  20.  * 
  21.  * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
  22.  *    CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
  23.  *    AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
  24.  *    ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
  25.  *    OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
  26.  *    WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
  27.  *    WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
  28.  *    DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
  29.  *    FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
  30.  *    OF THIRD PARTY RIGHTS.
  31.  */
  32.  
  33. /*
  34. *    rotateprocs.h
  35. *
  36. *    The header file for the procedures for rotated graphic operations.
  37. */
  38.  
  39. /*
  40. *    If alternate key is down, constrain every 15 degrees.
  41. *    (2 pi div 24 = pi div 12) see ConstrainPointToAngle()
  42. */
  43. #define  ANGLES    12.0
  44.  
  45. #define  ANGLE            (180/M_PI)
  46.  
  47. /*
  48. *    Takes the point passed in, rotates it around the point
  49. *    at the angle given and returns the new point.
  50. *    The new point replaces the old one and its address
  51. *    is returned as the return value.
  52. */
  53. extern NXPoint *RotatePoint(NXPoint *aPoint, NXPoint *cPoint, float angle);
  54.  
  55. /*
  56. *    Checks whether the point passed in lies in the rectangle
  57. *    rotated about its lower left vertice at the angle provided.
  58. *    Returns either YES or NO. Assumes an unflipped 
  59. *    coordinate system.
  60. */
  61. extern BOOL MouseInRotatedRect(NXPoint *aPoint, NXRect *aRect, float angle);
  62.  
  63. /*
  64. *    This procedure takes the unrotated rectangle, bRect,
  65. *    rotates it around the point, cPoint, at the angle, angle,
  66. *    and places the new bounding box that encloses the
  67. *    rotated rectangle in the rectangle aRect. The address
  68. *    of the new rectangle is returned as the return value.
  69. */
  70. NXRect *RotateRectBounds(NXRect *aRect, const NXRect *bRect,
  71.         NXPoint *cPoint, float angle);
  72.  
  73. /*
  74. *    This procedure takes two rectangles and an angle.
  75. *    It checks if the second rectangle rotated about its center
  76. *    at the given angle intersects the first rectangle. The
  77. *    first rectangle is unrotated. 
  78. */
  79. extern BOOL IntersectsRotatedRect(NXRect *aRect, NXRect *bRect, float angle);
  80.  
  81. /*
  82. *    This procedure takes two points and constrains the first
  83. *    point to the nearest interval for the angle passed in.
  84. */
  85. extern void ConstrainPointToAngle(NXPoint *aPoint, NXPoint *bPoint, float angle);
  86.  
  87.